﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PlanoAula.BD;



namespace PlanoAula.Repository
{
    public interface IPlanoAulaCabRepository : IGenericRepository<PlanoAulaCab, dbDataContext>
    {
        void GerarDadosIniciais(Guid PlanoAulaId);
    }
    public class PlanoAulaCabRepository : GenericRepository<PlanoAulaCab, dbDataContext>, IPlanoAulaCabRepository
    {
        IDiaAulaRepository repositoryDiaAula;
        IPlanoAulaCabRepository repository;
        IPlanoAulaDetalheRepository repositoryDetalhe;
        IDiaNaoUtilRepository repositoryDiaNaoUtil;
        IPlanoAulaDetalheRepository repositoryPlanoAulaDetalhe;
        public PlanoAulaCabRepository()
            : this(new PlanoAulaDetalheRepository(), new DiaNaoUtilRepository(), new DiaAulaRepository(), new PlanoAulaDetalheRepository())
        { }

        public PlanoAulaCabRepository(IPlanoAulaDetalheRepository repositoryDetalhe, IDiaNaoUtilRepository repositoryDiaNaoUtil, IDiaAulaRepository repositoryDiaAula, IPlanoAulaDetalheRepository repositoryPlanoAulaDetalhe)
        {
            this.repositoryPlanoAulaDetalhe = repositoryDetalhe;
            this.repositoryDiaAula = repositoryDiaAula;
            this.repositoryDetalhe = repositoryDetalhe;
            this.repositoryDiaNaoUtil = repositoryDiaNaoUtil;
        }
        public void GerarDadosIniciais(Guid PlanoAulaId)
        {
            var planoAulaCab = repository.GetByKey(PlanoAulaId);
            var diasAula = repositoryDiaAula.ObterDiaAulaDoPlanoAula(PlanoAulaId);

            DateTime temp = planoAulaCab.De;
            while (temp.Date <= planoAulaCab.Ate.Date)
            {
                if (repositoryDiaNaoUtil.EhDiaNaoUtil(temp.Date))
                {
                    continue;
                }
                var diasHoras = from d in diasAula
                                where d.Dia == (int)temp.DayOfWeek
                                select d;
                if (diasHoras != null)
                {
                    foreach (DiaAula d in diasHoras)
                    {
                        DateTime diaParaCadastrar = new DateTime(temp.Year, temp.Month, temp.Day, d.HoraInicio, d.MinutoInicio, 0);
                        bool diaCadastrado = repositoryPlanoAulaDetalhe.DiaJaCadastrado(PlanoAulaId, diaParaCadastrar);
                        if (!diaCadastrado)
                        {
                            PlanoAulaDetalhe pad = new PlanoAulaDetalhe
                            {
                                Data = temp,
                                PlanoAulaCab = planoAulaCab,
                                DiaAula = d
                            };
                            repositoryPlanoAulaDetalhe.Add(pad);
                        }
                    }
                }
                temp = temp.AddDays(1);
            }
            repositoryPlanoAulaDetalhe.SaveChanges();

        }
    }
}
